/**************************************************************************//**
 * @item     CosyOS-III 例程（服务应用）
 * @file     coop_ressus_1.c
 * @brief    协作_恢复挂起一
 * @details  通过{恢复、挂起}相关操作，实现任务的循环协作。
 * @note     适用于两个不同优先级任务的循环协作。
 * @author   迟凯峰
 * @version  V1.0.0
 * @date     2025.10.21
 ******************************************************************************/

/*-------------------------------------*
 | 服务              | 描述            |
 |-------------------+-----------------|
 | uSuspendTasking() | 任务中 挂起自身 |
 |-------------------+-----------------|
 | uResumeTask(task) | 任务中 恢复任务 |
 *-------------------------------------*/

#if 1 /* 编译开关 */

#include "CosyOS.H"

/* task_1 */
uCreateTask(task_1, 2, 384, 0, 0)
{
    while(1){
        /* 协作处理事务 开始 */
        
        /* 协作处理事务 结束 */
        /* 同步至task_2 开始 */
        uSuspendTasking(); // 挂起自身 -> 立即触发任务调度
        /* 同步至task_2 结束 */
    }
}

/* task_2 */
uCreateTask(task_2, 1, 384, 0, 0)
{
    while(1){
        /* 协作处理事务 开始 */
        
        /* 协作处理事务 结束 */
        /* 同步至task_1 开始 */
        uResumeTask(task_1); // task_1被恢复后为就绪状态，由于它的优先级高于task_2的优先级 -> 立即触发任务调度
        /* 同步至task_1 结束 */
    }
}

/* 启动钩子 */
void start_hook(void)
{
    uStartTask_Ready(task_1); // 启动task_1，初始状态为就绪状态
    uStartTask_Ready(task_2); // 启动task_2，初始状态为就绪状态
}

#endif
